跳到主要内容

使用 wireguard 搭建混合云组网

WireGuard 是一种简单、快速且安全的 VPN 解决方案,可以用来搭建混合云组网。下面是一般步骤来设置 WireGuard 用于混合云组网。

安装 WireGuard

在所有需要通信的服务器上安装 WireGuard。安装方法取决于你的操作系统,例如在 Ubuntu 上,你可以运行:

sudo apt update
sudo apt install wireguard

内核问题

需要安装版本高于 5.6 的内核

# 添加 PPA:
sudo add-apt-repository ppa:canonical-kernel-team/unstable
sudo apt update

# 安装新内核
sudo apt install linux-generic-lts-<版本号>

如果你不能升级内核,你可以尝试安装 WireGuard 的 DKMS(动态内核模块支持)版本,这将为你的当前内核版本编译和安装 WireGuard 模块。

1、安装必要的软件包:

sudo apt install software-properties-common

1、添加 WireGuard PPA:

sudo add-apt-repository ppa:wireguard/wireguard

2、更新软件包列表并安装 WireGuard:

sudo apt update
sudo apt install wireguard-dkms wireguard-tools

这将为你的现有内核版本编译并安装 WireGuard 模块。

配置 WireGuard

1、生成密钥对:在每台服务器上,运行以下命令来生成公钥和私钥。

wg genkey | tee privatekey | wg pubkey > publickey

2、配置服务器:选择一个服务器作为 WireGuard 的服务器。创建一个配置文件 /etc/wireguard/wg0.conf 并填入以下内容:

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <服务器私钥>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <客户端1公钥>
AllowedIPs = 10.0.0.2/32

[Peer]
PublicKey = <客户端2公钥>
AllowedIPs = 10.0.0.3/32

替换 <服务器私钥><客户端1公钥><客户端2公钥> 为相应的值。

3、配置客户端:在每台客户端服务器上,创建一个配置文件 /etc/wireguard/wg0.conf 并填入以下内容:

[Interface]
Address = 10.0.0.2/32
PrivateKey = <客户端私钥>
DNS = 10.0.0.1

[Peer]
PublicKey = <服务器公钥>
Endpoint = <服务器IP地址>:51820
AllowedIPs = 0.0.0.0/0

替换 <客户端私钥><服务器公钥><服务器IP地址> 为相应的值。

启动 WireGuard

在服务器和客户端上,运行以下命令来启动 WireGuard:

sudo wg-quick up wg0

要让 WireGuard 在系统启动时自动运行,可以使用:

sudo systemctl enable wg-quick@wg0

测试连接

在客户端上,尝试ping服务器的 WireGuard 地址:

ping 10.0.0.1

如果一切配置正确,你应该能够看到 ping 响应。

以上步骤仅为基本的 WireGuard 混合云组网配置。根据你的具体需求,可能还需要进一步的配置和调整,例如设置路由规则、防火墙规则等。

错误处理

报错“Device "wg0" does not exist.”意味着系统中不存在名为“wg0”的网络接口。这通常发生在尝试关闭或配置不存在的 WireGuard 接口时。

要解决这个问题,你可以按照以下步骤操作:

1、确保 WireGuard 已正确安装

首先,确保你已经在系统上正确安装了 WireGuard。

2、创建 WireGuard 接口

你可以通过运行以下命令来创建一个新的 WireGuard 接口:

sudo ip link add dev wg0 type wireguard

3、配置 WireGuard 接口

在创建了 WireGuard 接口之后,你需要为其分配私钥并进行其他必要的配置:

sudo wg set wg0 private-key /path/to/privatekey
sudo ip address add 192.168.1.1/24 dev wg0
sudo ip link set wg0 up

请确保你将 /path/to/privatekey 替换为私钥文件的实际路径,并根据需要调整 IP 地址。

4、测试接口

现在,你应该能够看到新创建的 wg0 接口:

ip addr show dev wg0

5、配置 WireGuard 连接

最后,你需要编辑 WireGuard 配置文件(通常位于 /etc/wireguard/wg0.conf),并添加必要的 Peer 信息。然后,你可以使用 wg-quick 来管理 WireGuard 接口:

sudo wg-quick up wg0

这应该会启动 wg0 接口并应用你在配置文件中指定的设置。

6、检查状态

要查看 WireGuard 接口的状态,你可以使用:

sudo wg show

这应该会显示关于 wg0 接口的信息,包括其公钥、私钥(显示为 (hidden))、连接的 peers 以及相关的网络设置。

检查当前的 wg

遇到个很奇怪的问题,每次启动都报错下面这个

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.1.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
RTNETLINK answers: Address already in use
[#] ip link delete dev wg0

所以很奇怪,所以 sudo wg show 发现 K3s 的 flannel 已经配置了一个网络了,所以要避开这个网段,以及这个端口 51820

interface: flannel-wg
public key: xxxxxxxxxxxxxxxxxxxx
private key: (hidden)
listening port: 51820

peer: iTR00/xxxxxxxxxx
endpoint: xxxxxxxxxx
allowed ips: xxxxxxxxxx/24
latest handshake: 1 minute, 37 seconds ago
transfer: 301.61 KiB received, 161.82 KiB sent
persistent keepalive: every 25 seconds

删掉某个 wg 配置

sudo wg-quick down wg0

MTU 问题

MTU(最大传输单元)是指在网络中单个数据包所能承载的最大字节数。它在数据链路层中定义,影响网络数据传输的效率和可靠性。

https://www.reddit.com/r/WireGuard/comments/iqh61x/sites_wont_connecttimeout_over_vpn/

MTU 的重要性

  • 数据包大小:MTU 决定了单个数据包的最大大小,包括头部和有效载荷。如果数据包大小超过 MTU,网络设备将会对其进行分片,导致额外的开销和延迟。

  • 性能:较小的 MTU 值可能会减少分片的发生,从而提高性能,尤其是在使用 VPN 或其他封装技术时。这是因为加密和封装会增加数据包的大小,因此适当降低 MTU 可以防止数据包分片。

  • 网络稳定性:如果网络中存在不匹配的 MTU 设置,可能会导致数据包丢失或连接问题。在某些情况下,尤其是 VPN 和隧道协议,过大的 MTU 可能导致数据包被丢弃,进而导致连接不稳定。

为什么将 MTU 改为 1200 解决了问题

将 MTU 设置为 1200 可能解决了您的问题,因为:

  1. 减少分片:更小的 MTU 值减少了通过 VPN 隧道发送的数据包的大小,从而降低了分片的可能性。

  2. 适应加密开销:WireGuard 等 VPN 协议在数据包中增加了加密头,可能会导致数据包大小超过原始 MTU。将 MTU 设置为 1200 可以确保加密后的数据包在传输中不会超过网络设备的限制。

  3. 提高连接稳定性:通过减少数据包大小,您可能会看到更稳定的连接和更少的丢包情况。

总结

MTU 是网络性能的重要因素,合理设置可以提高数据传输的效率和稳定性。如果您在使用 VPN 或特定网络环境时遇到问题,调整 MTU 是一种有效的解决方法。